package com.QBsoft.spring.gestor.impl;

import java.io.BufferedReader;
import java.io.FileReader;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.Scanner;

import org.apache.commons.io.IOUtils;

import com.QBsoft.commons.resources.WsResources;
import com.QBsoft.commons.resources.WsResourcesConexion;
import com.QBsoft.commons.util.FPedidos;
import com.QBsoft.commons.util.FormatoPedidos;
import com.QBsoft.commons.util.WsUtil;
import com.QBsoft.persistencia.Conexion;
import com.QBsoft.spring.gestor.IWsGestor;

/**
 * 
 * @author aquingaluisa
 * 
 */
public class WsGestor implements IWsGestor {
	@Override
	public String devolverProducto() throws Exception {
		WsResourcesConexion wsResourcesConexion = new WsResourcesConexion();
		String resultado = "";
		String sql;
		try {
			Conexion db = new Conexion();
			db.getConexion();
			
			sql = "SELECT 0 ProductVariety_Id,dep.CODIGO_VAR VarietyId, cap.CODIGO_CAR FarmId,cap.CODIGO_LON " +
				  "SizeId,cap.CODIGO_CAL QualityId, cap.CODIGO_CPR Code,cap.CODIGO_PCO PointOpening, " +
				  "cap.NOMBRE_CPR Name,cap.CODIGO_TBO SizeButton, codigo_eve, nt.nombre_nta num_tallos " +
				  "FROM E_CABECE_PRODUC cap, E_DETALL_PRODUC dep, e_numero_tallo nt " +
    			  "WHERE  cap.CODIGO_CPR = dep.CODIGO_CPR and dep.ES_BASE_DPR = 1 " +
				  "and nt.codigo_nta = cap.codigo_nta and cap.CODIGO_COM = '" + wsResourcesConexion.getString("venture.compania") + "'";
						
			ResultSet rset = db.obtenerDatos(sql);		
			
			ArrayList list = new ArrayList();
			ResultSetMetaData metadata = null;
			int col = 0;
			metadata = rset.getMetaData();
			col = metadata.getColumnCount();
			for (int k = 1; k <= col; k++) {
				list.add(metadata.getColumnLabel(k));
			}

			while (rset.next()) {
				for (int k = 1; k <= col; k++) {
					Object obj = rset.getObject(k);
					list.add(obj);
				}
			}
			resultado = WsUtil.getInstance().getTabSeparatedFile(list, col);
			db.cierraConexion();
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return resultado;
	}
	// formatoFecha yyyy-dd-mm
	
	@Override
	public String devolverDisponibles(String fechaInicio, String fechaFin, String fincas)
			throws Exception {
		String resultado = "";
		String sql;
		WsResourcesConexion wsResourcesConexion = new WsResourcesConexion();
				
		try {
			Conexion db = new Conexion();
			db.getConexion();
			fincas = WsUtil.getInstance().getConsultaInSql(fincas);
			sql = 	"SELECT e_detall_produc.CODIGO_VAR VarietyID,"
							+ "        e_longitud.CODIGO_LON SizeID,   "
							+ "		 e_caracteristic.CODIGO_CAR FarmID,"
							+ "         e_punto_corte.CODIGO_PCO BudOpeningID,"
							+ "		 '' Comment,"
							+ "		 E_TRANSA_POSTCO.FECHA_TPO RegisterDate,"
							+ "		 '' Date,"
							+ "		 '0' StandingOrderPosID,"
							+ "		 sum(e_transa_postco.cantidad_tpo * e_tip_tran_post.signo_ttp * E_DETALL_PRODUC.CANTIDAD_DPR) total_stem,"
							+ "		 sum(e_transa_postco.cantidad_tpo * e_tip_tran_post.signo_ttp * E_DETALL_PRODUC.CANTIDAD_DPR) AvailableStems,"
							+ "		 0 TradeDelta,0 SaleDelta,0 Delta2Stems,0 Delta2,0 Promotion,"
							+ "		 e_calidad.CODIGO_CAL Quality_Id,"
							+ "		 e_cabece_produc.codigo_cpr codigo_cpr,   "
							+ "		 E_DETALL_PRODUC.CANTIDAD_DPR unidad,"
							+ "		 sum(e_transa_postco.cantidad_tpo * e_tip_tran_post.signo_ttp) bunches"
							+ "    FROM e_cabece_produc,   "
							+ "         e_transa_postco,   "
							+ "         e_calidad,   "
							+ "         e_longitud,   "
							+ "         e_tipo_bunch,   "
							+ "         e_caracteristic,  "
							+ "         e_cabece_report,   "
							+ "         e_detall_report,   "
							+ "         e_tip_tran_post,   "
							+ "         e_mot_tran_post,   "
							+ "         e_punto_corte,   "
							+ "         e_tamanio_boton,   "
							+ "         e_unidad_postco,   "
							+ "         e_numero_tallo,   "
							+ "         e_empaque_venta,   "
							+ "         e_detall_produc,   "
							+ "         u_variedad  "
							+ "   WHERE ( e_transa_postco.codigo_cpr = e_cabece_produc.codigo_cpr ) and  "
							+ "         ( e_calidad.codigo_cal = e_cabece_produc.codigo_cal ) and  "
							+ "         ( e_longitud.codigo_lon = e_cabece_produc.codigo_lon ) and  "
							+ "         ( e_tipo_bunch.codigo_tbu = e_cabece_produc.codigo_tbu ) and  "
							+ "         ( e_caracteristic.codigo_car = e_cabece_produc.codigo_car ) and "
							+ "         ( e_detall_report.codigo_cre = e_cabece_report.codigo_cre ) and  "
							+ "         ( e_mot_tran_post.codigo_ttp = e_tip_tran_post.codigo_ttp ) and  "
							+ "         ( e_mot_tran_post.codigo_mtp = e_detall_report.codigo_mtp ) and  "
							+ "         ( e_mot_tran_post.codigo_mtp = e_transa_postco.codigo_mtp ) and  "
							+ "         ( e_punto_corte.codigo_pco = e_cabece_produc.codigo_pco ) and  "
							+ "         ( e_tamanio_boton.codigo_tbo = e_cabece_produc.codigo_tbo ) and  "
							+ "         ( e_unidad_postco.codigo_upo = e_cabece_produc.codigo_upo ) and  "
							+ "         ( e_numero_tallo.codigo_nta = e_cabece_produc.codigo_nta ) and  "
							+ "         ( e_empaque_venta.codigo_eve = e_cabece_produc.codigo_eve ) and  "
							+ "         ( e_detall_produc.codigo_cpr = e_cabece_produc.codigo_cpr ) and  "
							+ "         ( e_cabece_produc.codigo_car in (" + fincas + ") and " 
							+ "         ( u_variedad.codigo_var = e_detall_produc.codigo_var ) and  "
							+ "         ( ( e_transa_postco.fecha_tpo between '"
							+ fechaInicio
							+ "' and '"
							+ fechaFin
							+ "' ) AND  "
							+ "         ( e_transa_postco.codigo_com = '" + wsResourcesConexion.getString("venture.compania") + "' ) AND  "
							+ "         ( e_cabece_report.codigo_cre = '" + wsResourcesConexion.getString("venture.reportestock") +"' ) AND "
							+ "         ( e_transa_postco.codigo_mtp = e_detall_report.codigo_mtp ) AND  "
							+ "         ( e_detall_produc.es_base_dpr = 1 )))"
							+ " group by "
							+ "		 e_detall_produc.CODIGO_VAR,"
							+ "         e_longitud.CODIGO_LON,   "
							+ "		 e_caracteristic.CODIGO_CAR, "
							+ "         e_punto_corte.CODIGO_PCO, "
							+ "		 E_TRANSA_POSTCO.FECHA_TPO,"
							+ "		 e_calidad.CODIGO_CAL,"
							+ "		 e_cabece_produc.codigo_cpr,   "
							+ "		 E_DETALL_PRODUC.CANTIDAD_DPR"
							+ " order by "
							+ "		 e_detall_produc.CODIGO_VAR,"
							+ "		 E_TRANSA_POSTCO.FECHA_TPO";
			System.out.println("=====" + sql);
			
			ResultSet rset = db.obtenerDatos(sql);
			ArrayList list = new ArrayList();
			ResultSetMetaData metadata = null;
			int col = 0;
			metadata = rset.getMetaData();
			col = metadata.getColumnCount();
			for (int k = 1; k <= col; k++) {
				list.add(metadata.getColumnLabel(k));
			}

			while (rset.next()) {
				for (int k = 1; k <= col; k++) {
					Object obj = rset.getObject(k);
					list.add(obj);
				}
			}
			resultado = WsUtil.getInstance().getTabSeparatedFile(list, col);
			db.cierraConexion();
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return resultado;
	}

	
	public String devolverPK(String nombreTabla, String codigoPk)
			throws Exception {
		int tamanio = 0;
		String codigoPKGenerado = "";
		try {
			WsResourcesConexion wsResourcesConexion = new WsResourcesConexion();
			Conexion db = new Conexion();
			db.getConexion();
			// busco el codigo en la tabla de bloqueos
			String sql = "select MAX_NUM_BLO+1 as MAX_NUM_BLO from  S_BLOQUEO where TABLA_BLO='"
					+ nombreTabla
					+ "'  and CODIGO_COM='"
					+ wsResourcesConexion.getString("venture.compania")
					+ "' and CODIGO_SUC='"
					+ wsResourcesConexion.getString("venture.sucursal") + "'";
			ResultSet rset = db.obtenerDatos(sql);
			while (rset.next()) {
				codigoPKGenerado = rset.getObject("MAX_NUM_BLO").toString();
				System.out.println("encontro datos en la tabla de bloqueos");
			}
			// caso de no tener el codigo en la tabla de bloqueos
			if (codigoPKGenerado.isEmpty()) {
				String sqlDos = "select max(" + codigoPk + ")+1 pk from "
						+ nombreTabla + " where CODIGO_COM='"
						+ wsResourcesConexion.getString("venture.compania")
						+ "' and CODIGO_SUC='"
						+ wsResourcesConexion.getString("venture.sucursal")
						+ "'";
				ResultSet rsetDos = db.obtenerDatos(sqlDos);
				// siempre debe entrar por tener pk
				while (rsetDos.next()) {
					codigoPKGenerado = rsetDos.getObject("pk").toString();
					System.out.println("encontro datos en la tabla "
							+ nombreTabla);
				}
				db.iniciaTransaccion();
				String sqlInsertarBloqueo = "insert into S_BLOQUEO(CODIGO_COM,CODIGO_SUC,TABLA_BLO,MAX_NUM_BLO) values('"
						+ wsResourcesConexion.getString("venture.compania")
						+ "','"
						+ wsResourcesConexion.getString("venture.sucursal")
						+ "','" + nombreTabla + "'," + codigoPKGenerado + ")";
				db.insertar(sqlInsertarBloqueo);
				db.ejecutaTransaccion();
			} else {
				db.iniciaTransaccion();
				String sqlUpdate = "update S_BLOQUEO set MAX_NUM_BLO="
						+ codigoPKGenerado + "  where TABLA_BLO='"
						+ nombreTabla + "' and CODIGO_COM='"
						+ wsResourcesConexion.getString("venture.compania")
						+ "' and CODIGO_SUC='"
						+ wsResourcesConexion.getString("venture.sucursal")
						+ "'";
				db.insertar(sqlUpdate);
				db.ejecutaTransaccion();
			}
			// obtengo el tamano de la columna
			String sqlLen = "select TOP(1) LEN(" + codigoPk + ") as TM from "
					+ nombreTabla + " where CODIGO_COM='"
					+ wsResourcesConexion.getString("venture.compania")
					+ "' and CODIGO_SUC='"
					+ wsResourcesConexion.getString("venture.sucursal") + "'";
			ResultSet rsetTM = db.obtenerDatos(sqlLen);
			while (rsetTM.next()) {
				tamanio = (Integer) rsetTM.getObject("TM");
				System.out.println("tamanio de la columna:" + tamanio);
			}
			db.cierraConexion();
		} catch (SQLException e) {
			e.printStackTrace();
		}

		return WsUtil.getInstance()
				.completarConCeros(codigoPKGenerado, tamanio);
	}

	public String insertarPedido(String columnasTexto,String tipoSelecCPR ) throws Exception {
		String codPedido = "";	
		String sql = "";
		WsResourcesConexion wsResourcesConexion=new WsResourcesConexion();
		Conexion db = new Conexion();
		db.getConexion();  
		try {
		    Collection<FormatoPedidos> listPedidos= WsUtil.getInstance().obtenerPedidos(columnasTexto);
		    WsUtil.getInstance().ordenarFormatoPedido((List<FormatoPedidos>)listPedidos);
		    System.out.println("ordenar arreglo(Lista formato pedidos)");
		    String codigoPedidoAnt = "";
		    String codigoCajaAnt = "";
		    String codigoCaja = "";
		    String codigoPedido = "";
		    String codigoCpe = "";
		    String codigoDca="";
		    String codigoDbu;
		    String codigoCpr;
		    String codigoDta;
		    String numCaja;
		    Integer contCajas = 0;
		    boolean primeraCaja = true;
		    db.iniciaTransaccion();
		    
		    for (FormatoPedidos pedido : listPedidos)
		    {
		    	codigoPedido = pedido.getCodigo_cpe();
		    			    	
		    			    	
		    	//1. Inserta la cabecera del pedido
		    	if (codigoPedido.compareTo(codigoPedidoAnt) != 0){
		    		codigoCpe = this.devolverPK("v_cabece_pedido", "codigo_cpe");
		    		sql = "insert into v_cabece_pedido (codigo_cpe, codigo_cli, codigo_ven,	codigo_ciu,	codigo_cfi,	codigo_tve, codigo_lae,	codigo_des," +
		    		                                   "codigo_aca, codigo_log, fue_cpe, awb_cpe, fecha_salid_cpe, codigo_idp, orden_compr_cpe, manej_preci_cpe," +
		    				                           "numero_cpe, awb1_cpe, codigo_edp, fecha_factu_cpe, fecha_vuelo_cpe, hora_entreg_cpe, fecha_pago_cpe, " +
		    		                                   "observacion_cpe, numero_factur_cpe, dolar_cpe, fecha_elabo_cpe, vuelo_cpe, codigo_det, codigo_dei, " +
		    				                           "v_a_codigo_aca, observacio1_cpe, codigo_com, codigo_suc, pedid_padre_cpe, codigo_usu, peso_bruto_cpe, peso_neto_cpe) " +
		    		       "values ('"+codigoCpe+"','" + pedido.getCodigo_cli() + "','" + pedido.getCodigo_ven() + "','" + pedido.getCodigo_ciu() + "','" +
		    		       			   					 pedido.getCodigo_cfi() + "','" + pedido.getCodigo_tve() + "','" + pedido.getCodigo_lae() + "','" +
		    		       			   					 pedido.getCodigo_des() + "','" + pedido.getCodigo_aca() + "','" + pedido.getCodigo_log() + "','" +
		    		       			   					 pedido.getFue_cpe() + "','" + pedido.getAwb_cpe() + "','" + pedido.getFecha_salid_cpe() + "','" +		 
		    		       			   					 pedido.getCodigo_idp() + "','" + pedido.getOrden_compr_cpe() + "','" + pedido.getManej_preci_cpe() + "','" +
		    		       			   					 pedido.getNumero_cpe() + "','" + pedido.getAwb1_cpe() + "','" + pedido.getCodigo_edp() + "','" +
		    		       			   					 pedido.getFecha_factu_cpe() + "','" + pedido.getFecha_vuelo_cpe() + "','" + pedido.getHora_entrega_cpe() + "','" +
		    		       			   					 pedido.getFecha_pago_cpe() + "','" +  pedido.getObservacion_cpe() + "','" + pedido.getNumero_factur_cpe() + "','" + 
		    		       			   					 pedido.getDolar_cpe() + "','" + pedido.getFecha_elabo_cpe() + "','" + pedido.getVuelo_cpe() + "','" + 
		    		       			   					 pedido.getCodigo_det() + "','" + pedido.getCodigo_dei() + "','" + pedido.getV_a_codigo_aca() + "','" + 
		    		       			   					 pedido.getObservacion1_cpe() + "','" + wsResourcesConexion.getString("venture.compania") + "','" + 
		    		       			   					 wsResourcesConexion.getString("venture.sucursal") + "','" + codigoCpe + "','" + 
		    		       			   					 wsResourcesConexion.getString("venture.usuario")  + "'," + pedido.getPesoBruto() + "," + pedido.getPesoNeto() + ");";
		    		System.out.println("SQL CABECERA:"+sql);
		    		//guarda la cabecer del pedido
					db.insertar(sql);
					//db.ejecutaTransaccion();
		    		codigoPedidoAnt = codigoPedido;

		    		codPedido = codigoCpe;
		    		primeraCaja = true;
		    	}
		    	
		    	//2. Inserta el detalle de cajas
		    	codigoCaja = pedido.getCodigo_dca();
		    			    	
		    	if ( (codigoPedido.compareTo(codigoPedidoAnt) != 0) || (codigoCaja.compareTo(codigoCajaAnt) != 0) ) {

		    		
		    		codigoDca = this.devolverPK("v_detalle_caja", "codigo_dca");
		    		if (!primeraCaja) 			    	
			    		contCajas += Integer.valueOf(pedido.getCantidad_dca());			    			    		
		    		else 
		    			contCajas = 1;
		    		
		    		numCaja = WsUtil.getInstance().completarConCeros(contCajas.toString(),6);
		    		
		    		
			    	sql = "insert into v_detalle_caja (codigo_dca, codigo_tca, codigo_crs, cantidad_dca, marca_dca, observacion_dca, numero_caja_dca, cumpl_stock_dca, " +
			    									  "observacion_ven,  s_s_codigo_suc, codigo_cpe, codigo_suc, codigo_com, codigo_edp, codigo2_dca ) " +
			    		  "values ('"+codigoDca+"','" + pedido.getCodigo_tca() + "','" + pedido.getCodigo_crs() + "'," + pedido.getCantidad_dca() + ",'" + 
			    		  								pedido.getMarca_dca() + "','" + pedido.getObservacion_dca() + "','" + numCaja + "'," +
			    		  								pedido.getCumpl_stock_dca() + ",'" + 
			    		  								pedido.getObservacion_ven() + "','" +
			    		  								pedido.getS_s_codigo_suc() + "','" + codigoCpe + "','" + wsResourcesConexion.getString("venture.sucursal") + "','" +
			    		  								wsResourcesConexion.getString("venture.compania") + "','" + pedido.getCodigo_edp() + "','" + pedido.getShipmentId() + "' );"; 

		    	
			    	
		    		//guarda el detalle de caja
					db.insertar(sql);
					//db.ejecutaTransaccion();
		    		codigoCajaAnt = codigoCaja;
		    		primeraCaja = false;

		    		
		    	}
		    	
		    	// 3. Inserta el detalle de bunch
		    	codigoDbu = this.devolverPK("v_detalle_bunch", "codigo_dbu");
		    	if(tipoSelecCPR.equals("1")){
		    		codigoCpr=pedido.getCodigo_cpr();
		    	}else{
		    		codigoCpr = this.crearBuscarProducto (pedido, db );
		    	}
		    	sql = "insert into v_detalle_bunch (codigo_dbu, codigo_cpr, codigo_upo, codigo_dca, cantidad_dbu, precio_dbu, precio1_dbu, dolar_dbu, cumpl_stock_dbu, " +
		    										"observacion_dbu, codigo_com, codigo_suc, s_s_codigo_suc, alterno_dbu, observacio1_dbu ) " +
		    		  "values ('"+codigoDbu+"','" + codigoCpr + "','" + pedido.getCodigo_upo() + "','" + codigoDca + "','" + 
		    										pedido.getCantidad_dbu() + "'," + pedido.getPrecio_dbu() + "," + pedido.getPrecio1_dbu() + ",'" +
		    										pedido.getDolar_dbu() + "','" + pedido.getCumpl_stock_dbu() + "','" + pedido.getObservacio_dbu() + "','" + 
		    										wsResourcesConexion.getString("venture.compania") + "','" + wsResourcesConexion.getString("venture.sucursal") + "','" +
		    										pedido.getS_s_codigo_suc() + "','" + pedido.getOrderId() + "','" + pedido.getObservacio1_dbu() + "' );";
		    	
	    		//guarda el detalle de bunches
				db.insertar(sql);
				//db.ejecutaTransaccion();
		    	
				codigoDta = this.devolverPK("v_detalle_tallo", "codigo_dta");
						    	
				sql = "insert into v_detalle_tallo (codigo_dta, codigo_dbu, codigo_var, codigo_com, codigo_suc, cantidad_dta, precio_dta, precio1_dta) " +
		    		  "values ('"+codigoDta+"','" + codigoDbu + "','" + pedido.getCodigo_var() + "','" + wsResourcesConexion.getString("venture.compania") + "','" +
		    		  			                    wsResourcesConexion.getString("venture.sucursal") + "','" + pedido.getCantidad_dta() + "','" + 
		    		  			                    pedido.getPrecio_dta() + "','" + pedido.getPrecio_dta() + "');";
		    										
		    	
		    	
	    		//guarda el detalle de tallos
				db.insertar(sql);
						    	
		    	
		    	}
		    	db.ejecutaTransaccion();
		    	System.out.println("Pedido Generado Correctamente");
		    	
		    }catch(Exception ex){
		    	System.out.println("Encontro un error al realizar el pedido:"+ex);
		    	db.ejecutaTransaccion();
		    	return null;
		    }
		
		
		return codPedido;
		
	}

	public String crearBuscarProducto(FormatoPedidos pedido, Conexion db) {
		String codigo_cpr = "";
		String nuevo_codigo_cpr;
		String nuevo_codigo_dpr;
		String nombre_cpr = "";
		String codigo_nta = "";
		String sql;

		try {

			// obtine el codigo_nta
			sql = "select codigo_nta from E_NUMERO_TALLO where NOMBRE_NTA = '"
					+ pedido.getCantidad_dta() + "'";
			ResultSet rset = db.obtenerDatos(sql);
			while (rset.next()) {
				codigo_nta = rset.getObject("codigo_nta").toString();
				break;
			}

			WsResourcesConexion wsResourcesConexion = new WsResourcesConexion();
			sql = "select codigo_cpr " + "from e_cabece_produc cab where "
					+ "cab.CODIGO_TBU = '"
					+ pedido.getCodigo_tbu()
					+ "' and "
					+ "cab.CODIGO_LON = '"
					+ pedido.getCodigo_lon()
					+ "' and "
					+ "cab.CODIGO_UPO = '"
					+ pedido.getCodigo_upo()
					+ "' and "
					+ "cab.CODIGO_CAR = '"
					+ pedido.getCodigo_car()
					+ "' and "
					+ "cab.CODIGO_CAL = '"
					+ pedido.getCodigo_cal()
					+ "' and "
					+ "cab.CODIGO_PCO = '"
					+ pedido.getCodigo_pco()
					+ "' and "
					+ "cab.CODIGO_TBO = '"
					+ pedido.getCodigo_tbo()
					+ "' and "
					+ "cab.CODIGO_NTA = '"
					+ codigo_nta
					+ "' and "
					+ "cab.CODIGO_EVE = '"
					+ pedido.getCodigo_eve()
					+ "' and "
					+ "cab.e_u_codigo_upo  = '"
					+ pedido.getE_u_codigo_upo()
					+ "' and "
					+ "cab.CODIGO2_CPR = '"
					+ pedido.getCodigo_var()
					+ "' ";

			// busco el codigo en la tabla de bloqueos
			rset = db.obtenerDatos(sql);

			while (rset.next()) {
				codigo_cpr = rset.getObject("codigo_cpr").toString();
				System.out.println("Se ha encontrado el producto: "
						+ codigo_cpr);
				break;
			}

			// si no encontro crea el producto nuevo
			if (codigo_cpr.isEmpty()) {

				// genera el nombre del producto
				sql = "select nombre_var + ' ' + NOMBRE_LON as nombreP from u_variedad v, E_LONGITUD l "
						+ "where codigo_var = '"
						+ pedido.getCodigo_var()
						+ "' and l.CODIGO_LON = '"
						+ pedido.getCodigo_lon()
						+ " '";
				rset = db.obtenerDatos(sql);
				while (rset.next()) {
					nombre_cpr = rset.getObject("nombreP").toString() + " "
							+ pedido.getCantidad_dta();
					break;
				}

				// inserta el cabecera del producto
				nuevo_codigo_cpr = this.devolverPK("e_cabece_produc",
						"codigo_cpr");
				sql = "insert into e_cabece_produc (codigo_cpr, CODIGO_TBU , CODIGO_LON, CODIGO_UPO, "
						+ "CODIGO_CAR, CODIGO_CAL, CODIGO_PCO, CODIGO_TBO, CODIGO_NTA, CODIGO_EVE, "
						+ "e_u_codigo_upo, CODIGO2_CPR,  NOMBRE_CPR, NOMBRE1_CPR, codigo_com, codigo_suc  ) values ('"
						+ nuevo_codigo_cpr
						+ "','"
						+ pedido.getCodigo_tbu()
						+ "','"
						+ pedido.getCodigo_lon()
						+ "','"
						+ pedido.getCodigo_upo()
						+ "','"
						+ pedido.getCodigo_car()
						+ "','"
						+ pedido.getCodigo_cal()
						+ "','"
						+ pedido.getCodigo_pco()
						+ "','"
						+ pedido.getCodigo_tbo()
						+ "','"
						+ codigo_nta
						+ "','"
						+ pedido.getCodigo_eve()
						+ "','"
						+ pedido.getE_u_codigo_upo()
						+ "','"
						+ pedido.getCodigo_var()
						+ "','"
						+ nombre_cpr
						+ "','"
						+ nombre_cpr
						+ "','"
						+ wsResourcesConexion.getString("venture.compania")
						+ "','"
						+ wsResourcesConexion.getString("venture.sucursal")
						+ "')";

				db.insertar(sql);

				nuevo_codigo_dpr = this.devolverPK("E_DETALL_PRODUC",
						"codigo_dpr");

				sql = "insert into  E_DETALL_PRODUC  (CODIGO_DPR,  CODIGO_CPR ,  CODIGO_VAR ,  CODIGO_COM ,  "
						+ "CODIGO_SUC ,  CANTIDAD_DPR ,  ES_BASE_DPR )values ('"
						+ nuevo_codigo_dpr
						+ "','"
						+ nuevo_codigo_cpr
						+ "','"
						+ pedido.getCodigo_var()
						+ "','"
						+ wsResourcesConexion.getString("venture.compania")
						+ "','"
						+ wsResourcesConexion.getString("venture.sucursal")
						+ "'," + pedido.getCantidad_dta() + ",1)";

				db.insertar(sql);

				return nuevo_codigo_cpr;

			}

		} catch (Exception e) {
			System.out.println("error al BuscarProducto:" + e.getMessage());
			return pedido.getCodigo_cpr();
		}

		return codigo_cpr;

	}
	//codigos (String orderId, String shipmentid)
	@Override
	public String getFacturaByOrderId(String tipo, String codigoTipo) throws Exception {
		WsResourcesConexion wsResourcesConexion = new WsResourcesConexion();
		System.out.println("tipo:"+tipo+":********:"+"codigoTipo:"+codigoTipo);
		String resultado = "";
		//si tipo 1 orderId
		//si tipo 2 shipmentid
		String sql="";
		if(tipo!=null){
			//order id
			if(tipo.equals("1")){
				sql="select  "
						+"						V_CABECE_FACTUR.CODIGO_CPE,  "
						+"						  V_DET_BUNC_FACT.observacion_dbf AS Shipmentid,  "
						+"						  V_DET_BUNC_FACT.alterno_dbf AS orderId,  "
						+"						  v_det_caja_fact.numero_caja_dcf NumCaja,  "
						+"						  v_det_caja_fact.cantidad_dcf cantCajas,  "
						+"						  CONVERT(varchar(10),(CONVERT(INT,v_det_caja_fact.numero_caja_dcf))) +'-'+CONVERT(varchar(10),( CONVERT(INT, v_det_caja_fact.numero_caja_dcf)+CONVERT(INT,v_det_caja_fact.cantidad_dcf)-1)) as orden,  "
						+"						       v_tipo_caja.nombre_tca BoxT,    "
						+"						  v_det_caja_fact.cantidad_dcf*v_tipo_caja.CONVERSION_TCA CantCajasConversion,   "
						+"						  (v_det_caja_fact.cantidad_dcf*v_tipo_caja.CONVERSION_TCA)/b.num CantCajasConversion2,   "
						+"						  v_det_caja_fact.marca_dcf Id,  "
						+"						  E_CABECE_PRODUC.CODIGO_CAR FarmId,  "
						+"						  E_DETALL_PRODUC.CODIGO_VAR Varietyid,   "
						+"						       e_longitud.codigo_lon as Leng,  "
						+"						       e_numero_tallo.nombre_nta Stems,  "  
						+"						       v_det_bunc_fact.precio_dbf/e_numero_tallo.nombre_nta PrecioAduana,   "
						+"						       v_det_bunc_fact.precio1_dbf/e_numero_tallo.nombre_nta PrecioCliente,  "          
						+"						  v_det_bunc_fact.CANTIDAD_DBF Bunch_Box,      "
						+"						e_calidad.nombre_cal,  "
						+"						v_det_bunc_fact.codigo_dbf,  "
						+"						e_numero_tallo.nombre_nta*v_det_bunc_fact.CANTIDAD_DBF TotalStems  "
						+"						   FROM e_cabece_produc,  "
						+"								E_DETALL_PRODUC,  "
						+"								V_CABECE_FACTUR,  "
						+"						         v_det_bunc_fact,   " 
						+"						         v_tipo_caja,    "
						+"						         e_tipo_bunch,    "
						+"						         e_longitud,    "
						+"						         e_numero_tallo,  "  
						+"						         v_det_caja_fact,e_calidad,   "
						+"								(select count(v_det_caja_fact.numero_caja_dcf) num,  "
						+"									v_det_caja_fact.numero_caja_dcf NumCajaT2   "
						+"										FROM e_cabece_produc, E_DETALL_PRODUC,  "
						+"										 v_det_bunc_fact,  "
						+"										 V_CABECE_FACTUR,    "
						+"										 v_tipo_caja,    "
						+"										 e_tipo_bunch,    "
						+"										 e_longitud,    "
						+"										 e_numero_tallo,  "  
						+"										 v_det_caja_fact,e_calidad    "
						+"								   WHERE ( v_det_bunc_fact.codigo_cpr = e_cabece_produc.codigo_cpr ) and     "
						+"										 ( v_tipo_caja.codigo_tca = v_det_caja_fact.codigo_tca ) and     "
						+"										 ( e_tipo_bunch.codigo_tbu = e_cabece_produc.codigo_tbu ) and     "
						+"										 ( e_longitud.codigo_lon = e_cabece_produc.codigo_lon ) and  "
						+"										 ( V_CABECE_FACTUR.CODIGO_CFA = v_det_caja_fact.CODIGO_CFA ) and     "
						+"										 ( e_numero_tallo.codigo_nta = e_cabece_produc.codigo_nta ) and     "
						+"										 ( v_det_caja_fact.codigo_dcf = v_det_bunc_fact.codigo_dcf ) and    "
						+"								( E_CABECE_PRODUC.CODIGO_CPR = E_DETALL_PRODUC.CODIGO_CPR) and  "
						+"								( E_DETALL_PRODUC.ES_BASE_DPR = 1) and   "
						+"										 (       "
						+"										 ( v_det_caja_fact.codigo_com = '" + wsResourcesConexion.getString("venture.compania") + "' ) AND      "
						+"										 ( e_tipo_bunch.codigo_com = '" + wsResourcesConexion.getString("venture.compania") + "' ) AND      "
						+"										 ( e_longitud.codigo_com = '" + wsResourcesConexion.getString("venture.compania") + "' ) AND      "
						+"										 ( e_cabece_produc.codigo_com = '" + wsResourcesConexion.getString("venture.compania") + "' ) AND   "  
						+"										 ( e_calidad.codigo_cal = e_cabece_produc.codigo_cal) AND     "
						+"										 ( V_DET_BUNC_FACT.alterno_dbf ='"+codigoTipo+"' ) AND  "
						+"										 ( v_tipo_caja.codigo_com = '" + wsResourcesConexion.getString("venture.compania") + "' ) AND   "
						+"										 ( v_det_bunc_fact.codigo_com = '" + wsResourcesConexion.getString("venture.compania") + "'))   "
						+"								group by v_det_caja_fact.numero_caja_dcf) b  "
						+"						  WHERE ( v_det_bunc_fact.codigo_cpr = e_cabece_produc.codigo_cpr ) and     "
						+"						         ( v_tipo_caja.codigo_tca = v_det_caja_fact.codigo_tca ) and     "
						+"						         ( e_tipo_bunch.codigo_tbu = e_cabece_produc.codigo_tbu ) and     "
						+"						         ( e_longitud.codigo_lon = e_cabece_produc.codigo_lon ) and     "
						+"								 ( V_CABECE_FACTUR.CODIGO_CFA = v_det_caja_fact.CODIGO_CFA ) and  "
						+"						         ( e_numero_tallo.codigo_nta = e_cabece_produc.codigo_nta ) and     "
						+"						         ( v_det_caja_fact.codigo_dcf = v_det_bunc_fact.codigo_dcf ) and    "
						+"						( E_CABECE_PRODUC.CODIGO_CPR = E_DETALL_PRODUC.CODIGO_CPR) and  "
						+"						( E_DETALL_PRODUC.ES_BASE_DPR = 1) and   "
						+"						         (       "
						+"						         ( v_det_caja_fact.codigo_com = '" + wsResourcesConexion.getString("venture.compania") + "' ) AND      "
						+"						         ( e_tipo_bunch.codigo_com = '" + wsResourcesConexion.getString("venture.compania") + "' ) AND    "
						+"						         ( e_longitud.codigo_com = '" + wsResourcesConexion.getString("venture.compania") + "' ) AND      "
						+"						         ( e_cabece_produc.codigo_com = '" + wsResourcesConexion.getString("venture.compania") + "' ) AND   "  
						+"						         ( e_calidad.codigo_cal = e_cabece_produc.codigo_cal) AND     "
						+"						         ( v_tipo_caja.codigo_com = '" + wsResourcesConexion.getString("venture.compania") + "' ) AND     "
						+"						         ( v_det_bunc_fact.codigo_com = '" + wsResourcesConexion.getString("venture.compania") + "') ) and   "
						+"						b.NumCajaT2=v_det_caja_fact.numero_caja_dcf  and  "
						+"						V_DET_BUNC_FACT.alterno_dbf ='"+codigoTipo+"' "
						+"						order by   V_CABECE_FACTUR.CODIGO_CPE,  "
						+"								   v_det_caja_fact.numero_caja_dcf   ";
			}
			//shipmentid
			if(tipo.equals("2")){
				sql="select "
+"						V_CABECE_FACTUR.CODIGO_CPE, "
+"						  V_DET_BUNC_FACT.observacion_dbf AS Shipmentid, "
+"						  V_DET_BUNC_FACT.alterno_dbf AS orderId, "
+"						  v_det_caja_fact.numero_caja_dcf NumCaja, "
+"						  v_det_caja_fact.cantidad_dcf cantCajas, "
+"						  CONVERT(varchar(10),(CONVERT(INT,v_det_caja_fact.numero_caja_dcf))) +'-'+CONVERT(varchar(10),( CONVERT(INT, v_det_caja_fact.numero_caja_dcf)+CONVERT(INT,v_det_caja_fact.cantidad_dcf)-1)) as orden, "
+"						       v_tipo_caja.nombre_tca BoxT,   "
+"						  v_det_caja_fact.cantidad_dcf*v_tipo_caja.CONVERSION_TCA CantCajasConversion,  "
+"						  (v_det_caja_fact.cantidad_dcf*v_tipo_caja.CONVERSION_TCA)/b.num CantCajasConversion2,  "
+"						  v_det_caja_fact.marca_dcf Id, "
+"						  E_CABECE_PRODUC.CODIGO_CAR FarmId, "
+"						  E_DETALL_PRODUC.CODIGO_VAR Varietyid,  "
+"						       e_longitud.codigo_lon as Leng, "
+"						       e_numero_tallo.nombre_nta Stems,"   
+"						       v_det_bunc_fact.precio_dbf/e_numero_tallo.nombre_nta PrecioAduana,           "
+"						       v_det_bunc_fact.precio1_dbf/e_numero_tallo.nombre_nta PrecioCliente,          " 
+"						  v_det_bunc_fact.CANTIDAD_DBF Bunch_Box,     "
+"						e_calidad.nombre_cal, "
+"						v_det_bunc_fact.codigo_dbf, "
+"						e_numero_tallo.nombre_nta*v_det_bunc_fact.CANTIDAD_DBF TotalStems "
+"						   FROM e_cabece_produc, "
+"								E_DETALL_PRODUC, "
+"								V_CABECE_FACTUR, "
+"						         v_det_bunc_fact, "  
+"						         v_tipo_caja,   "
+"						         e_tipo_bunch,   "
+"						         e_longitud,   "
+"						         e_numero_tallo,"   
+"						         v_det_caja_fact,e_calidad,  "
+"								(select count(v_det_caja_fact.numero_caja_dcf) num, "
+"									v_det_caja_fact.numero_caja_dcf NumCajaT2  "
+"										FROM e_cabece_produc, E_DETALL_PRODUC, "
+"										 v_det_bunc_fact, "
+"										 V_CABECE_FACTUR,  " 
+"										 v_tipo_caja,   "
+"										 e_tipo_bunch,   "
+"										 e_longitud,   "
+"										 e_numero_tallo,"   
+"										 v_det_caja_fact,e_calidad   "
+"								   WHERE ( v_det_bunc_fact.codigo_cpr = e_cabece_produc.codigo_cpr ) and    "
+"										 ( v_tipo_caja.codigo_tca = v_det_caja_fact.codigo_tca ) and    "
+"										 ( e_tipo_bunch.codigo_tbu = e_cabece_produc.codigo_tbu ) and    "
+"										 ( e_longitud.codigo_lon = e_cabece_produc.codigo_lon ) and "
+"										 ( V_CABECE_FACTUR.CODIGO_CFA = v_det_caja_fact.CODIGO_CFA ) and    "
+"										 ( e_numero_tallo.codigo_nta = e_cabece_produc.codigo_nta ) and    "
+"										 ( v_det_caja_fact.codigo_dcf = v_det_bunc_fact.codigo_dcf ) and   "
+"								( E_CABECE_PRODUC.CODIGO_CPR = E_DETALL_PRODUC.CODIGO_CPR) and "
+"								( E_DETALL_PRODUC.ES_BASE_DPR = 1) and  "
+"										 (      "
+"										 ( v_det_caja_fact.codigo_com = '" + wsResourcesConexion.getString("venture.compania") + "' ) AND     "
+"										 ( e_tipo_bunch.codigo_com = '" + wsResourcesConexion.getString("venture.compania") + "' ) AND     "
+"										 ( e_longitud.codigo_com = '" + wsResourcesConexion.getString("venture.compania") + "' ) AND     "
+"										 ( e_cabece_produc.codigo_com = '" + wsResourcesConexion.getString("venture.compania") + "' ) AND "   
+"										 ( e_calidad.codigo_cal = e_cabece_produc.codigo_cal) AND    "
+"										 ( V_DET_BUNC_FACT.observacion_dbf = '"+codigoTipo+"' ) AND "
+"										 ( v_tipo_caja.codigo_com = '" + wsResourcesConexion.getString("venture.compania") + "' ) AND  "
+"										 ( v_det_bunc_fact.codigo_com = '" + wsResourcesConexion.getString("venture.compania") + "'))  "
+"								group by v_det_caja_fact.numero_caja_dcf) b "
+"						  WHERE ( v_det_bunc_fact.codigo_cpr = e_cabece_produc.codigo_cpr ) and    "
+"						         ( v_tipo_caja.codigo_tca = v_det_caja_fact.codigo_tca ) and    "
+"						         ( e_tipo_bunch.codigo_tbu = e_cabece_produc.codigo_tbu ) and    "
+"						         ( e_longitud.codigo_lon = e_cabece_produc.codigo_lon ) and    "
+"								 ( V_CABECE_FACTUR.CODIGO_CFA = v_det_caja_fact.CODIGO_CFA ) and "
+"						         ( e_numero_tallo.codigo_nta = e_cabece_produc.codigo_nta ) and   " 
+"						         ( v_det_caja_fact.codigo_dcf = v_det_bunc_fact.codigo_dcf ) and   "
+"						( E_CABECE_PRODUC.CODIGO_CPR = E_DETALL_PRODUC.CODIGO_CPR) and "
+"						( E_DETALL_PRODUC.ES_BASE_DPR = 1) and  "
+"						         (      "
+"						         ( v_det_caja_fact.codigo_com = '" + wsResourcesConexion.getString("venture.compania") + "' ) AND     "
+"						         ( e_tipo_bunch.codigo_com = '" + wsResourcesConexion.getString("venture.compania") + "' ) AND   "
+"						         ( e_longitud.codigo_com = '" + wsResourcesConexion.getString("venture.compania") + "' ) AND     "
+"						         ( e_cabece_produc.codigo_com = '" + wsResourcesConexion.getString("venture.compania") + "' ) AND    "
+"						         ( e_calidad.codigo_cal = e_cabece_produc.codigo_cal) AND    "
+"						         ( v_tipo_caja.codigo_com = '" + wsResourcesConexion.getString("venture.compania") + "' ) AND    "
+"						         ( v_det_bunc_fact.codigo_com = '" + wsResourcesConexion.getString("venture.compania") + "') ) and  "
+"						b.NumCajaT2=v_det_caja_fact.numero_caja_dcf  and "
+"						V_DET_BUNC_FACT.observacion_dbf = '"+codigoTipo+"' "
+"						order by   V_CABECE_FACTUR.CODIGO_CPE, "
+"								   v_det_caja_fact.numero_caja_dcf  ";
			}
			if(!sql.isEmpty()){
				try {
					Conexion db = new Conexion();
					db.getConexion();
					System.out.println("Consulta realizar:"+sql);
					ResultSet rset = db.obtenerDatos(sql);
					ArrayList list = new ArrayList();
					ResultSetMetaData metadata = null;
					int col = 0;
					metadata = rset.getMetaData();
					col = metadata.getColumnCount();
					for (int k = 1; k <= col; k++) {
						list.add(metadata.getColumnLabel(k));
					}

					while (rset.next()) {
						for (int k = 1; k <= col; k++) {
							Object obj = rset.getObject(k);
							list.add(obj);
						}
					}
					resultado = WsUtil.getInstance().getTabSeparatedFile(list, col);
					db.cierraConexion();
				} catch (SQLException e) {
					e.printStackTrace();
				}
			}else{
				System.out.println("El valor de tipo no coincide (1,2)");
			}
		}else{
			System.out.println("El valor de tipo no puede ser nulo");
		}
		return resultado;
		
	}

}
